//package com.weather.data.generator;
//
//
//
//
//import com.baomidou.mybatisplus.core.mapper.BaseMapper;
//import com.baomidou.mybatisplus.extension.service.IService;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//
//import java.util.Arrays;
//import java.util.Collections;
//import java.util.List;
//
///**
// * @author HanYiMing
// * @date 2024/3/29
// * @description mybatis-plus 逆向工程
// */
//public class Generator {
//
//    public static void main(String[] args) {
//        String projectPath = System.getProperty("user.dir");
//        String url = "jdbc:mysql://127.0.0.1:3306/weather_data";
//        String username = "root";
//        String password = "root";
//        // 使用元数据查询的方式生成代码,默认已经根据jdbcType来适配java类型,支持使用typeConvertHandler来转换需要映射的类型映射
//        FastAutoGenerator
//                .create(url, username, password)
//                // 全局配置
//                .globalConfig(builder -> {
//                    // 指定输出目录
//                    builder.outputDir(projectPath + "\\src\\main\\java")
//                            // 不打开输出目录
//                            .disableOpenDir()
//                            .enableSpringdoc() // 生成 Scheme swagger3 的实体类注释
//                            // 作者
////                            .author("HanYiMing")
//                            // 开启Swagger
//                            .enableSwagger() // 开启 swagger 模式
////                            .fileOverride() // 覆盖已生成文件
//                            // 时间类型
//                            .dateType(DateType.TIME_PACK)
//                            // 注释日期
//                            .commentDate("yyyy-MM-dd");
//                })
//                .packageConfig(builder -> {
//                    // 父包名
//                    builder.parent("com.weather.data")
//                            // pojo 实体
//                            .entity("entity.DO")
//                            // service 接口
//                            .service("service")
//                            // impl 实现
//                            .serviceImpl("service.impl")
//                            // mapper 接口
//                            .mapper("dao")
//                            // mapper xml 文件
//                            .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "/src/main/resources/mappers"))
//                            // controller 控制类
//                            .controller("controller");
//                })
//                //模板配置
////                .templateConfig(builder ->
////                {
////                    builder.disable(TemplateType.ENTITY)//禁用模板
////                            .entity("/templates/entity.java")//设置实体模板路径(JAVA)
////                            .service("/templates/service.java")
////                            .serviceImpl("/templates/serviceImpl.java")
////                            .mapper("/templates/mapper.java")
////                            .xml("/templates/mapper.xml")
////                            .controller("/templates/controller.java");
////                })
//
//                //策略配置
//                .strategyConfig((scanner,builder) -> {
//                    //开启大写命名
//                    builder.enableCapitalMode()
//                            //去掉表前缀
//                            .addTablePrefix("weather_")
//                            .addInclude(getTables(scanner.apply("请输入表名，多个英文逗号分隔？所有输入 all")))
//                            //Entity配置策略
//                            .entityBuilder()//名称转换实现
//                            .enableChainModel()//开启链式模型 默认为false
//                            .enableLombok()//开启 lombok 模型 默认为false
//                            .enableRemoveIsPrefix()//开启 Boolean 类型字段移除 is 前缀 默认为false
//                            .enableTableFieldAnnotation()//开启生成实体时生成字段注解 默认为false
//                            .enableActiveRecord()//开启 ActiveRecord 模型  默认为false
//                            .versionColumnName("version")//乐观锁数据库字段
//                            .versionPropertyName("version")//乐观锁实体名
//                            .logicDeleteColumnName("deleted")//删除数据库字段
//                            .logicDeletePropertyName("deleteFlag")//删除实体名
//                            .columnNaming(NamingStrategy.underline_to_camel)//数据库字段表映射到实体的命名策略
////                            .addSuperEntityColumns("created_by", "created_time", "updated_by", "updated_time")//添加父类公共字段  数据库写了就可以不加
//                            .addIgnoreColumns()//忽略字段
////                            .addTableFills(new Property("createTime", FieldFill.INSERT))//表字段填充
////                            .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))//表字段填充
////                            .formatFileName("%sDO")
////                            .idType(IdType.ASSIGN_UUID)//全局主键类型
//                            //Controller策略配置
//                            .controllerBuilder()
//                            .enableHyphenStyle()//开启驼峰转连字符 默认为false
//                            .enableRestStyle()//开启生成@RestController 控制器 默认为false
//                            .formatFileName("%sController")//格式化文件名称
//                            //Service配置策略
//                            .serviceBuilder()
//                            .superServiceClass(IService.class)//设置 service 接口父类
//                            .superServiceImplClass(ServiceImpl.class)//设置 service 实现类父类
//                            .formatServiceFileName("%sService")//格式化 service 接口文件名称
//                            .formatServiceImplFileName("%sServiceImp")//格式化 service 实现类文件名称
//                            //Mapper策略配置
//                            .mapperBuilder()
//                            .superClass(BaseMapper.class)//设置父类
//                            .enableBaseResultMap()//启用 BaseResultMap 生成  默认false
//                            .enableBaseColumnList()//启用 BaseColumnList  默认false
////                .cache(MyMapperCache.class)//设置缓存实现类
//                            .formatMapperFileName("%sMapper")//格式化 mapper 文件名称
//                            .formatXmlFileName("%sMapper");//格式化 xml 实现类文件名称
//                })
//                .templateEngine(new FreemarkerTemplateEngine())
//                .execute();
//
//    }
//
//    // 处理 all 情况
//    protected static List<String> getTables(String tables) {
//        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
//    }
//}
//
